package reflect;

import java.lang.reflect.Method;
import java.util.Scanner;

/**
 * 反射机制调用方法
 */
public class ReflectDemo4 {
    public static void main(String[] args) throws Exception {
        Person p = new Person();
        p.sayHello();

        //反射机制
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入类名:");
        String className = scanner.nextLine();
        System.out.println("请输入方法名:");
        String methodName = scanner.nextLine();

        //1实例化
//        Class cls = Class.forName("reflect.Person");
        Class cls = Class.forName(className);
        Object obj = cls.newInstance();//Object obj = new Person();
        //2调用方法
        /*
            Class提供的方法:
            Method[] getMethods()
            获取当前类对象所表示的类中所有的公开方法(包含从超类继承的)

            Method getMethod(String methodName,...)
            根据给定的方法名和参数列表获取指定的方法
         */
        //获取Person中的sayHello方法
//        Method method = cls.getMethod("sayHello");
        Method method = cls.getMethod(methodName);
        /*
            Method提供了一个重要的方法:invoke
            用于执行该Method对象表示的方法
         */
        method.invoke(obj);
    }
}








